package cn.seecoder.ai.enums;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;

/**
 * @author fanyanpeng
 * @date 2023/4/19 2:20
 */
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum MachineLearningAlgorithmTypeEnum {
    CLASSIFICATION("CLASSIFICATION",
            "分类算法",
            "一种监督学习，分类",
            new MachineLearningAlgorithmEnum[]{
                    MachineLearningAlgorithmEnum.DECISION_TREE_CLASSIFICATION,
                    MachineLearningAlgorithmEnum.GRADIENT_BOOSTED_TREE_CLASSIFICATION,
                    MachineLearningAlgorithmEnum.LOGISTIC_REGRESSION_CLASSIFICATION,
                    MachineLearningAlgorithmEnum.MULTILAYER_PERCEPTRON_CLASSIFICATION,
                    MachineLearningAlgorithmEnum.NAIVE_BAYES_CLASSIFICATION,
                    MachineLearningAlgorithmEnum.RANDOM_FOREST_CLASSIFICATION,
                    MachineLearningAlgorithmEnum.XGBOOST_CLASSIFICATION
    }
    ),
    REGRESSION("REGRESSION",
            "回归算法",
            "一种监督学习，回归",
            new MachineLearningAlgorithmEnum[]{
//                    MachineLearningAlgorithmEnum.RANDOM_FOREST_REGRESSION,
                    MachineLearningAlgorithmEnum.DECISION_TREE_REGRESSION
    })
    ,
    CLUSTERING("CLUSTERING",
            "聚类算法",
            "一种非监督学习，聚类",
            new MachineLearningAlgorithmEnum[]{
                    MachineLearningAlgorithmEnum.K_MEANS_CLUSTERING
            })
    ;


    private final String self;
    private final String machineLearningAlgorithmTypeName;

    //    private final String learningType;
    private final String description;
    private final MachineLearningAlgorithmEnum[] machineLearningAlgorithmEnums;

    MachineLearningAlgorithmTypeEnum(String self, String machineLearningAlgorithmTypeName, String description, MachineLearningAlgorithmEnum[] machineLearningAlgorithmEnums) {
        this.self = self;
        this.machineLearningAlgorithmTypeName = machineLearningAlgorithmTypeName;
        this.description = description;
        this.machineLearningAlgorithmEnums = machineLearningAlgorithmEnums;
    }
}
